
//================v2要点总结===============
/**
 * 1.参考题解二，在v1的基础上进行优化
 * 2.既然不考虑对输入链表的改动，那么其实连l1和l2都可以省略了
 * 3. 我们一开始声明的值为-1的节点，称之为哨兵节点（解决边界问题，不直接参与生产活动）
 * 4. 最后一步干的事情，跟最开始的判断l1和l2的很相似，因此进行简化
 */


function ListNode(val, next) {
    this.val = (val === undefined ? 0 : val)
    this.next = (next === undefined ? null : next)
}

/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var mergeTwoLists = function (l1, l2) {
    // 赋初始值,声明一个哨兵节点
    let preHead = new ListNode(-1)
    let cur = preHead
    while (l1 && l2) {
        if (l1.val < l2.val) {
            cur.next = l1
            l1 = l1.next
        } else {
            cur.next = l2
            l2 = l2.next
        }
        cur = cur.next
    }
    //拼接剩余的,
    l1 ? cur.next = l1 : cur.next = l2
    return preHead.next
};

console.log(mergeTwoLists())